home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
-
- #define PENUP() pen_up=1
- #define PENDOWN() pen_up=0
- #define SETCOLOR(x) color=x
- #define SETWIDTH(x) width=x
- #define BLACK 0
- #define RED 1
- #define GREEN 2
- #define BLUE 3
- #define FAT 0
- #define MEDIUM 1
- #define THIN 2
-
- #define TRUE 1
- #define FALSE 0
-
- int pen_up;
- int color;
- int width;
- int x1, x2, y1, y2;
- int gotx1, gotx2, goty1, goty2;
-
- /* Function Draw - demonstrates use of the Simple Drawing Language
- Does not actually draw lines, simple parses the first parameter and
- prints commands on screen */
-
- Draw (char *str, int val)
- {
- int *pval=&val; //points to optional parameters
- //restore defaults
- gotx1=goty1=gotx2=goty2=FALSE;
- x1=x2=y1=y2=0;
- pen_up=1;
- color = BLACK;
- width=MEDIUM;
- //loop to parse the command string
- while (TRUE)
- {
- switch (*str++)
- {
- case 'p': PENUP(); break; //pick pen up
- case 'P': PENDOWN(); break; //put pen down
- case 'c': //set color
- switch (*str++)
- {
- case 'R': SETCOLOR(RED); printf ("Color set to red\n");break;
- case 'G': SETCOLOR(GREEN); printf ("Color set to green\n");break;
- case 'B': SETCOLOR(BLUE); printf ("Color set to blue\n");break;
- case 'b': SETCOLOR(BLACK); printf ("Color set to black\n");break;
- default: return -1;
- } //End switch (on character)
- break;
- case 'w': //set width
- switch (*str++)
- {
- case 'T': SETWIDTH(THIN); printf ("Width set to thin\n");break;
- case 'M': SETWIDTH(MEDIUM); printf ("Width set to medium\n");break;
- case 'F': SETWIDTH(FAT); printf ("Width set to fat\n");break;
- default: return -1;
- } //End switch (on character)
- break;
- case '%': //get next optional parameter
- switch (*str++)
- {
- case 'x': //set x coordinate
- if (gotx2) {x1=x2; x2=*pval++; break;}
- if (!gotx1) {x1=*pval++; gotx1=TRUE; break;}
- if (!gotx2) {x2=*pval++; gotx2=TRUE; break;}
- break;
- case 'y': //set y coordinate
- if (goty2) {y1=y2; y2=*pval++; break;}
- if (!goty1) {y1=*pval++; goty1=TRUE; break;}
- if (!goty2) {y2=*pval++; goty2=TRUE; break;}
- break;
- default: return -1;
- } //End switch (token)
- //do we have enough info to draw the line?
- if (gotx2 && goty2 && !pen_up)
- {
- printf ("Drawing line <%d,%d>-<%d,%d>\n", x1,y1,x2,y2);
- x1 = x2;
- y1 = y2;
- goty2 = FALSE;
- gotx2 = FALSE;
- } //end if (got both coordinates - draw line)
- break;
- case '\0': //end of command string
- return 0;
- default: return -1;
- } //End switch (on character)
- } //End while (TRUE)
- return 0;
- } //End function (Draw)
- WRAP_EOF
-